热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

卡口|长效_保姆级包体积优化教程

篇首语:本文由编程笔记#小编为大家整理,主要介绍了保姆级包体积优化教程相关的知识,希望对你有一定的参考价值。市面上有很多优化方案,但是都没有

篇首语:本文由编程笔记#小编为大家整理,主要介绍了保姆级包体积优化教程相关的知识,希望对你有一定的参考价值。


市面上有很多优化方案,但是都没有一个完整的链路体系,现在它来了,本文将带你进阶新高度,不管是面试、绩效KPI,还是汇报宣讲,都能让你游刃有余!

前置必读:

Android包体积优化(常规、进阶、极致) 涵盖各阶段全面的优化方案。


1、背景
  • 提升下载转化率
  • 提升更新率,这个是鲜有人提到的,二次下载同样重要,它能推动业务快速落地。


具体可以参考前置必读里面的



2、现状
  • 最新版本?MB,突破80大关?100大关?竞对?
  • 近6个月平均每个月增速?MB
  • 近6个月平均每个版本更新周期(7天?10天?)


横向对比、纵向对比


输出报表



3、目标

减少30MB & 降低30%



树立目标



4、现状具体分析
  1. 图片占比15%
  2. 代码占比25%
  3. so文件50%
  4. 其他10%


结合项目分析,输出每项占比背后的具体因素(设计花哨?业务复杂?架构合理?)


输出饼图



5、优化思路
  1. 压缩参与打包的文件
  2. 减少参与打包的文件



从哪入手,怎么做



6、规划思考
  1. 如何保证稳定性?
  2. 如何长效治理?


站在更高的角度去思考问题


如果不能保证稳定性,那宁愿不做


做完就反弹,那就是白做



7、里程碑



  1. 信息公示
  2. 确保进度稳中推进
  3. 有风险及时寻求资源支持


8、抓手
  • android Studio
  • ApkChecker
  • ClassShark
  • 产出具有项目特色的工具


切入点



9、技术大图



PPT汇报示例



9、图片优化



由手动模式向工具模式进化



10、代码优化


11、远程so

需要熟悉打包流程,知道Gradle的各种Task执行在干什么事。

大致流程图:

打包阶段,在合并apk之前,把需要远程的so文件上传至远端,然后剔除掉。



Flutter的so远程这方面没啥资料,提一下,源码搜一下FlutterLoader,继承FlutterLoader重写startInitialization,原理就是干预原有的so文件加载路径。



11.1、下载流程

沉淀通用的下载SDK


  1. 网络状态管理
  2. 下载任务优先级调度
  3. 断点续传

11.1.1、启动下载(闲时)

闲时下载:用户是无感知的,即使失败,也不需要交互形式表现。


11.1.2、按需下载

按需下载:下载流程与闲时下载一样,但交互表现形式不一样,需要让用户感知你在干什么、什么进度,提供一个loading页承载。

自检:不一定是我们代码的问题,可能是用户网络不可用、存储不够等,针对不同的情况,给予不同的指导操作。


12、测试
  1. 兼容性:android 5.0-12.0
  2. 是否重复下载、是否可用(32/64)
  3. 断网、弱网
  4. 覆盖安装
  5. 前台退后台

13、监控告警


13.1、埋点


  1. success
  2. error code/message
  3. so name
  4. retry
  5. demotion
  6. storage size
  7. download type
  8. download time
  9. 设备信息
  10. 网络信息
  11. 用户信息


埋点的信息其实就是排障需要的信息



13.2、监控


  1. 下载成功率
  2. load成功率
  3. loading页打开成功率

13.3、告警


  1. x分钟x次失败
  2. 根据历史趋势


告警形式包括但不限于钉钉群、微信群、短信、电话等。



13.4、排障


  1. 沉淀排障指南
  2. 数据库底表查询sql

14、长效治理

给打包增加一个后置卡口,既可以感知每次的增长因素,也可以避免疯狂反弹。

后置卡口的设计原理:


  1. 打包过程中会对资源文件、代码文件、jar/aar等文件进行合并,既然知道有哪些文件,就可以知道这些文件的大小,就可以输出一个file size的文件作为当前版本的基线。
  2. 阈值配置信息可写死,可远程配置。

15、结果
  • 优化前、优化后对比
  • 竞对 对比
  • 下载时间对比
  • 安装时间对比


输出报表,列出各项数据的对比



16、未来规划
  1. 增加白名单机制,比如logo是不需要压缩的
  2. 沉淀方法论
  3. 流程工具化、智能化
  4. 月度报告
  5. 数据大盘


没有完美的方案,一定是有可以优化改进的地方



17、价值&意义
  1. 技术:沉淀通用组件、技术创新(flutter)
  2. 团队:个人影响力
  3. 公司:减少带宽,全年节省x经费
  4. 用户:下载时间减少x、安装时间减少x、
  5. 社会:每次下载减少x流量,全年节省流量x亿

18、思考
  1. 需要做到极致吗?理论上启动非必须的图片、文件、so都是可以远程的,可是 减肥是要越瘦越好吗?
  2. 是否考虑极简包方案?


避免做个工具人



19、面试问题
  1. 为什么选用tinypng,原理是什么,还有其他方案吗?
  2. 远程so的选定标准是什么?
  3. 支持断点续传吗?
  4. 会重复下载吗?
  5. 下载可以根据网络选择吗?
  6. 有文件完整性校验吗?
  7. 有下载优先级吗?
  8. 怎么避免64位设备下到32位so文件?
  9. so文件更新之后会在设备上与老的版本共存吗?
  10. 兜底方案是什么?
  11. 还有哪些可以优化的地方?

20、最后
  1. 顶级厨师在线烹饪,做好了自己吃,不负责喂🤪
  2. 多思考,深度思考,可以梦到的那种🧐
  3. 多搞点花样,多体现个人部分,即使没有技术深度
  4. 角色转换,个人、团队、产品、拉新运营、用户、公司、社会…
  5. 技术价值、业务价值
  6. 别忘了三连 ~

推荐阅读
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • {moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ... [详细]
  • {moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • 本文介绍了Oracle存储过程的基本语法和写法示例,同时还介绍了已命名的系统异常的产生原因。 ... [详细]
  • 本文介绍了Android中的assets目录和raw目录的共同点和区别,包括获取资源的方法、目录结构的限制以及列出资源的能力。同时,还解释了raw目录中资源文件生成的ID,并说明了这些目录的使用方法。 ... [详细]
  • 本文分析了Wince程序内存和存储内存的分布及作用。Wince内存包括系统内存、对象存储和程序内存,其中系统内存占用了一部分SDRAM,而剩下的30M为程序内存和存储内存。对象存储是嵌入式wince操作系统中的一个新概念,常用于消费电子设备中。此外,文章还介绍了主电源和后备电池在操作系统中的作用。 ... [详细]
  • 本文介绍了关系型数据库和NoSQL数据库的概念和特点,列举了主流的关系型数据库和NoSQL数据库,同时描述了它们在新闻、电商抢购信息和微博热点信息等场景中的应用。此外,还提供了MySQL配置文件的相关内容。 ... [详细]
  • ShiftLeft:将静态防护与运行时防护结合的持续性安全防护解决方案
    ShiftLeft公司是一家致力于将应用的静态防护和运行时防护与应用开发自动化工作流相结合以提升软件开发生命周期中的安全性的公司。传统的安全防护方式存在误报率高、人工成本高、耗时长等问题,而ShiftLeft提供的持续性安全防护解决方案能够解决这些问题。通过将下一代静态代码分析与应用开发自动化工作流中涉及的安全工具相结合,ShiftLeft帮助企业实现DevSecOps的安全部分,提供高效、准确的安全能力。 ... [详细]
  • 近期,某用户在重启RAC一个节点的数据库实例时,发现启动速度非常慢。同时业务部门反馈连接RAC存活节点的业务也受影响。通过对日志的分析, ... [详细]
  • {moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ... [详细]
  • 1.官网下载了mysql-5.7.17-win64.zip包,配置遇到很多麻烦,记录一下;2.解压后放到指定的文件夹,修改mysql-5.7.17的配置文件my-default.i ... [详细]
  • 工作经验谈之-让百度地图API调用数据库内容 及详解
    这段时间,所在项目中要用到的一个模块,就是让数据库中的内容在百度地图上展现出来,如经纬度。主要实现以下几点功能:1.读取数据库中的经纬度值在百度上标注出来。2.点击标注弹出对应信息。3 ... [详细]
  • 浅析Mysql数据回滚错误的解决方法_PHP教程:MYSQL的事务处理主要有两种方法。1、用begin,rollback,commit来实现begin开始一个事务rollback事 ... [详细]
author-avatar
神烟醉_263
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有